import type { InjectionKey } from 'vue'
import { watch } from 'vue'
// 状态
import { defineStore, useStoreLocal } from '@naturefw/nf-state'
import type { IState } from '@naturefw/nf-state/dist/type'
// 类型
import type {
  IColumn,
  ITable,
  ISheets,
  IMetaDataState
} from '../types/10-meta'

// 转换函数
// import { listToTree, treeToList } from '../controller/org'
// 状态的标识，避免命名冲突
const flag = Symbol('meta-data') as InjectionKey<string>

/**
 * 注册局部状态
 * * 部门信息管理用的状态 : IMetaDataState & IState
 * @returns
 */
export const regMetaDataState = (): IMetaDataState & IState => {
  // 定义 角色用的状态
  const state = defineStore<IMetaDataState>(flag, {
    state: (): IMetaDataState => {
      return {
        sheetNames: ['没有文件'], // 工作簿的名称集合
        sheets: {}, // 工作簿的集合，包括表、字段
        tables: {}, // 表的集合，包括字段
        timeoutCol: 0,
        timeoutForm: 0,
        timeoutFind: 0,
        timeoutGrid: 0,
        current: { // 当前的部门的信息
          sheetName: '', // 选择的工作簿的名称
          table: { // 当前选择的表的信息，包括 字段集合
            tableID: '', // 表编号
            tableName: '', // 表名
            cnName: '', // 中文名称
            content: '', // 表的说明
            cols: [] // 字段集合
          }, // 序号
          col: { // 当前选择的字段，一个字段
            tableId: '', // 表编号
            columnId: '', // 字段编号
            colName: '', // 字段名称
            cnName: '', // 中文名称
            colType: '', // 字段类型，nvarchar、int 等
            colSize: 4, // 大小
            defaultValue: '', // 默认值
            canNull: false, // 允许空
            controlTypeId: 101, // 控件类型
            content: '' // 字段说明
          } // 选中的节点
        }
      }
    },
    getters: {
    },
    actions: {
      
    }
  },
  { isLocal: true }
  )
 
  return state
}

/**
 * 子组件获取状态
 */
export const getMetaDataState = (): IMetaDataState & IState => {
  return useStoreLocal<IMetaDataState & IState>(flag)
}
